//********************************************************************************************************
// Product Name: MapWindow.Interfaces Alpha
// Description:  Low level interfaces that allow separate components to use objects that are defined
//               in completely independant libraries so long as they satisfy the basic interface requirements.
//********************************************************************************************************
// The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); 
// you may not use this file except in compliance with the License. You may obtain a copy of the License at 
// http://www.mozilla.org/MPL/ 
//
// Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 
// ANY KIND, either express or implied. See the License for the specificlanguage governing rights and 
// limitations under the License. 
//
// The Original Code is MapWindow.Interfaces
//
// The Initial Developer of this Original Code is Ted Dunsford. Created in August, 2007.
// 
// Contributor(s): (Open source contributors should list themselves and their modifications here). 
//
//********************************************************************************************************
using System;
using System.Collections.Generic;
using System.Text;

using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace MapWindow.Drawing
{

    /// <summary>
    /// This contains the set of symbology members that are point specific.
    /// This does not contain the shared properties, which can be found in
    /// IFeatureSymbology
    /// </summary>
    public interface IPointSymbolizer : IFeatureSymbolizer
    {


        /// <summary>
        /// Creates an image using the symbol properties and returns an appropriate texture.
        /// </summary>
        /// <param name="device">The Microsoft.DirectX.Direct3D device for controlling texture creation</param>
        /// <returns>A Texture that should represent the symbol for this icon</returns>
        Texture CreateTexture(Device device);

        /// <summary>
        /// Copies all the point symbol properties from any valid implementation of IPointFeatureSymbology
        /// like a MapPoint or a MapPointLayer 
        /// </summary>
        /// <param name="copyFrom"></param>
        void Copy(IPointSymbolizer copyFrom);


        /// <summary>
        /// The angle to rotate the point icon, image, or custom drawing.
        /// </summary>
        float Angle
        {
            get;
            set;
        }

       
        /// <summary>
        /// This is only used for the custom drawn Shape types if the
        /// DotVisible property is set to true.
        /// </summary>
        System.Drawing.Color DotColor
        {
            get;
            set;
        }



        /// <summary>
        /// Determines how large to draw a dot at the center.
        /// </summary>
        float DotRadius
        {
            get;
            set;
        }

        /// <summary>
        /// Controls whether or not a custom dot is drawn at the center of the
        /// feature.
        /// </summary>
        bool DotVisible
        {
            get;
            set;
        }


       
        /// <summary>
        /// The icon to be drawn.  These are drawn at their original size.
        /// Be sure to set the Shape property to PointShapes.Icon.
        /// </summary>
        System.Drawing.Icon Icon
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets an image to use.  The image will be
        /// stretched to match the Size property for this feature.
        /// Be sure to set the Shape property to PointShapes.Image.
        /// </summary>
        System.Drawing.Image Image
        {
            get;
            set;
        }

        /// <summary>
        /// Before drawing to the real world, a sprite is created and used as a texture.
        /// This controls the number of pixels that are on the texture, which will be
        /// stretched in order to fit the real world dimensions.
        /// </summary>
        System.Drawing.Size PixelSize
        {
            get;
            set;
        }


        /// <summary>
        /// If no icon or image is specified, A custom icon will be drawn according to 
        /// the Border Shape, Size, Angle, Pen and Fill Color.  The default is a blue
        /// </summary>
        PointShapes Shape
        {
            get;
            set;
        }

        /// <summary>
        /// Stores the size of the feature.  Icons and Images will stretch to match this
        /// size while the custom shapes will be drawn in order to match this size.
        /// The default should be around 10 x 10
        /// </summary>
        System.Drawing.SizeF Size
        {
            get;
            set;
        }

    }
}
